package jamirr;

import java.util.Objects;

public interface Invokable {

    /**
     * 获取所需的参数类型。
     *
     * @return 参数数组
     */
    Argument<?>[] getArguments();

    /**
     * 参数是否匹配
     *
     * @param parameterTypes 参数类型
     * @return 是否匹配
     */
    default boolean matches(Class<?>[] parameterTypes) {
        Objects.requireNonNull(parameterTypes, "parameterTypes is null");

        final Argument<?>[] arguments = getArguments();

        if (parameterTypes.length != arguments.length) {
            return false;
        }

        for (int i = 0; i < parameterTypes.length; i++) {
            if (parameterTypes[i] == null
                    || !parameterTypes[i].equals(arguments[i].getType())) {
                return false;
            }
        }

        return true;
    }
}
